/**
 * 2010-2-25
 * PeopleService.java
 */
package com.snda.udb.service.profile.biz.person;
import java.util.HashMap;

import org.junit.runners.Parameterized.Parameters;

import com.snda.commons.servicegate.annotations.Endpoint;
import com.snda.commons.servicegate.annotations.Param;
import com.snda.commons.servicegate.annotations.Service;
import com.snda.relation.service.opensocial.GetResponse;
import com.snda.relation.service.opensocial.UpdateResponse;
//import com.snda.udb.service.profile.dal.domain.UserAll;
import com.snda.udb.service.profile.biz.domain.UdbProfileStatistic;
import com.snda.udb.service.profile.dal.domain.UserAppInfo;
import com.snda.udb.service.profile.dal.domain.UserProfileBasic;
import com.snda.udb.service.profile.dal.domain.UserProfileCompany;
import com.snda.udb.service.profile.dal.domain.UserProfileEducation;
import com.snda.udb.service.profile.dal.domain.UserProfileExtend;
//import com.snda.udb.service.profile.dal.domain.UserProfileStatistic;
import com.snda.udb.service.profile.dal.domain.UserProfileStatistic;

/**
 * @author lichencheng
 * @since  2010-04-01
 * @file   PeopleService.java
 * 主要用于udb的数据操作和数据提供。
 * 包含：用户基本信息、拓展信息、应用信息、统计信息、学校和工作信息   
 */

@Service(value = "PeopleService")
public interface PeopleService {
	
//	/**
//	 * @param sdid 盛大数字ID
//	 * @return 单个用户的所有信息 
//	 */
//	@Endpoint
//	public GetResponse<UserAll> getPeople(
//			@Param(value = "sdid") Long sdid);	
	
	/**
	 * @param sdid 盛大数字ID
	 * @return 单个用户的基本信息
	 */
	@Endpoint 
	public GetResponse<UserProfileBasic> getBasicInfo(
			@Param(value = "sdid") Long sdid);
	
	/**
	 * @param sdid
	 * @return 单个用户的基本信息包括头像的URL
	 */
	@Endpoint
	public GetResponse<UserProfileBasic> getBasicInfoWithAvator(
			@Param(value = "sdid") Long sdid);
	
	/**
	 * @param sdid 一或多个盛大数字ID
	 * @return 单个用户的基本信息
	 */
	@Endpoint 
	public GetResponse<UserProfileBasic> getMultiBasicInfo(
			@Param(value = "sdid") Long[] sdid);
	
	/**
	 * @param sdid 一或多个盛大数字ID
	 * @return id是否激活的boolean
	 */
	@Endpoint
	public GetResponse<HashMap<Long, Boolean>> getMultiActivation(
			@Param(value = "sdid") Long[] sdid);
	/**
	 * @param sdid 盛大数字ID
	 * @return 单个用户的拓展信息
	 */
	@Endpoint
	public GetResponse<UserProfileExtend> getExtendInfo(
			@Param(value = "sdid") Long sdid);	
	
	/**
	 * @param sdid 一或多个盛大数字ID
	 * @return 单个用户的拓展信息
	 */
	@Endpoint
	public GetResponse<UserProfileExtend> getMultiExtendInfo(
			@Param(value = "sdid") Long[] sdid);	

	/** 
	 * @param sdid 盛大数字ID
	 * @return 单个用户的应用信息
	 */
	@Endpoint
	public GetResponse<UserAppInfo> getAppInfo(
			@Param(value = "sdid") Long sdid);	
	
	/**
	 * @param sdid 盛大数字ID
	 * @return 单个用户的统计信息
	 */
	@Endpoint
	public GetResponse<UdbProfileStatistic> getStatistic(
			@Param(value = "sdid") Long sdid);
	
	/**
	 * @param sdid 盛大数字ID
	 * @return 单个用户的教育信息
	 */
	@Endpoint
	public GetResponse<UserProfileEducation> getEducations(
			@Param(value = "sdid") Long sdid);
	
	/**
	 * @param sdid 盛大数字ID
	 * @return 单个用户的工作经历信息
	 */
	@Endpoint 
	public GetResponse<UserProfileCompany> getCompanys(
			@Param(value = "sdid") Long sdid);

	/**
	 * @param nickname
	 * @return 该用户的sdid
	 */
	@Endpoint
	public GetResponse<Long> getSdid(
			@Param(value = "nickname") String nickname);
	
	/**
	 * @param sdid 盛大数字ID
	 * @param schoolName 学校名称
	 * @param schoolType 学校类型
	 * @param major 专业名称
	 * @param classroom 班级
	 * @param startYear 开始年份
	 * @return 操作结果信息(包括数据库插入ID)
	 */
	@Endpoint(alias="addEducation")
	public UpdateResponse postAddEducation(
			@Param(value = "sdid") Long sdid,
			@Param(value = "schoolName", optional = true) String schoolName,
			@Param(value = "schoolType", optional = true) Integer schoolType,
			@Param(value = "major", optional = true) String major,
			@Param(value = "classroom", optional = true) String classroom,
			@Param(value = "startYear", optional = true) Integer startYear);
	
	/**
	 * @param sdid 盛大数字ID
	 * @param company 公司名称
	 * @param position 职位
	 * @param startDate 开始日期
	 * @param endDate 结束日期
	 * @return 操作结果信息(包括数据库插入ID)
	 */
	@Endpoint(alias="addCompany")
	public UpdateResponse postAddCompany(
			@Param(value = "sdid") Long sdid,
			@Param(value = "company", optional = true) String company,
			@Param(value = "position", optional = true) String position,
			@Param(value = "startDate", optional = true) String startDate,
			@Param(value = "endDate", optional = true) String endDate);

	
	/**
	 * @param sdid 盛大数字ID
	 * @param nickname 昵称
	 * @param avatarVersion 头像版本信息
	 * @param sex 性别
	 * @param birthday 生日
	 * @param blood 血型
	 * @param nation 国籍
	 * @param hometown 家乡
	 * @param locality 所在地
	 * @param searchFlag 搜索信息
	 * @param keywords 关键词
	 * @param state 状态
	 * @param level 等级
	 * @param memberType 会员类型
	 * @return 操作结果信息
	 */
	@Endpoint(alias="updateBasicInfo")
	public UpdateResponse postBasicInfo(
			@Param(value = "sdid") Long sdid,
			@Param(value = "nickname", optional = true) String nickname,
			@Param(value = "avatarVersion", optional = true) Integer avatarVersion,
			@Param(value = "sex", optional = true) Integer sex,
			@Param(value = "birthday", optional = true) String birthday,
			@Param(value = "blood", optional = true) Integer blood,
			@Param(value = "nationality", optional = true) Integer nation,
			@Param(value = "hometown", optional = true) Integer hometown,
			@Param(value = "locality", optional = true) Integer locality,
			@Param(value = "searchFlag", optional = true) Integer searchFlag,
			@Param(value = "keywords", optional = true) String keywords,
			@Param(value = "state", optional = true) Integer state,
			@Param(value = "activeFlag", optional = true) Integer activeFlag,
			@Param(value = "level", optional = true) Integer level,
			@Param(value = "memberType", optional = true) Integer memberType,
			@Param(value = "registerIp", optional = true) String registerIp,
			@Param(value = "reserve2",optional = true) Integer reserve2);
	
	/**
	 * @param sdid 盛大数字ID
	 * @param qq QQ号码
	 * @param msn MSN账户
	 * @param mail 电子邮件账户
	 * @param mobile 手机号码
	 * @param tel 座机号码
	 * @param hobby 兴趣爱好
	 * @param idol 偶像
	 * @param recentVision 最近愿景
	 * @param motto 座右铭
	 * @param favoriteMovieTv 喜欢的影视
	 * @param favoriteBook 喜欢的书籍
	 * @param favormusic 喜欢的音乐
	 * @param favorsport 喜欢的运动
	 * @return 操作结果信息
	 * @param website 个人网址
	 */
	@Endpoint(alias="updateExtendInfo")
	public UpdateResponse postExtendInfo(
			@Param(value = "sdid") Long sdid,
			@Param(value = "qq", optional = true) Long qq,
			@Param(value = "msn", optional = true) String msn,
			@Param(value = "mail", optional = true) String mail,
			@Param(value = "mobile", optional = true) Long mobile,
			@Param(value = "tel", optional = true) String tel,
			@Param(value = "address", optional = true) String address,
			@Param(value = "zipcode", optional = true) Integer zipcode,
			@Param(value = "hobby", optional = true) String hobby,
			@Param(value = "idol", optional = true) String idol,
			@Param(value = "recentVision", optional = true) String recentVision,
			@Param(value = "motto", optional = true) String motto,
			@Param(value = "favoriteMovieTv", optional = true) String favoriteMovieTv,
			@Param(value = "favoriteBook", optional = true) String favoriteBook,
			@Param(value = "favoriteMusic", optional = true) String favoriteMusic,
			@Param(value = "favoriteSport", optional = true) String favoriteSport,
			@Param(value = "webStation", optional = true) String webStation);
		
	/**
	 * @param sdid 盛大数字ID
	 * @param appInfo1 APP信息1
	 * @param appInfo2 APP信息2
	 * @return 操作结果信息
	 */
	@Endpoint(alias="updateAppInfo")
	public UpdateResponse postAppInfo(
			@Param(value = "sdid") Long sdid,
			@Param(value = "appInfo1", optional = true) String appInfo1,
			@Param(value = "appInfo2", optional = true) String appInfo2);
	
	/**
	 * @param sdid 盛大数字ID
	 * @param id 记录ID
	 * @param schoolName 学校名称
	 * @param schoolType 学校类型
	 * @param major 专业
	 * @param classroom 班级名
	 * @param startYear 开始年份
	 * @return 操作结果信息
	 */
	@Endpoint(alias="updateEducation")
	public UpdateResponse postUpdateEducation(
			@Param(value = "sdid") Long sdid,
			@Param(value = "id") Long id,
			@Param(value = "schoolName", optional = true) String schoolName,
			@Param(value = "schoolType", optional = true) Integer schoolType,
			@Param(value = "major", optional = true) String major,
			@Param(value = "classroom", optional = true) String classroom,
			@Param(value = "startYear", optional = true) Integer startYear);
	
	/**
	 * @param sdid 盛大数字ID
	 * @param id 记录ID
	 * @param company 公司名称
	 * @param position 职位
	 * @param startDate 开始日期
	 * @param endDate 结束日期
	 * @return 操作结果信息
	 */
	@Endpoint(alias="updateCompany")
	public UpdateResponse postUpdateCompany(
			@Param(value = "sdid") Long sdid,
			@Param(value = "id") Long id,
			@Param(value = "company", optional = true) String company,
			@Param(value = "position", optional = true) String position,
			@Param(value = "startDate", optional = true) String startDate,
			@Param(value = "endDate", optional = true) String endDate);
	
	/**
	 * @param sdid 盛大数字ID
	 * @param title 统计信息名(array)
	 * @param titleCount 统计信息值(array)
	 * @return 操作结果信息
	 */
	@Endpoint(alias="updateStatistic")
	public UpdateResponse postUpdateStatistic(
			@Param(value = "sdid") Long sdid,
			@Param(value = "title", optional = true) Integer[] title,
			@Param(value = "titleCount", optional = true) Integer[] titleCount);
		
	/**
	 * @param sdid 盛大数字ID
	 * @param title 统计信息名(array)
	 * @param titleCount 统计信息值,需要增加和减少的数值(array)
	 * @return 操作结果信息
	 */
	@Endpoint(alias="updateCountStatistic")
	public UpdateResponse postUpdateCountStatistic(
			@Param(value = "sdid") Long sdid,
			@Param(value = "title", optional = true) Integer[] title,
			@Param(value = "titleCount", optional = true) Integer[] titleCount);

	/**
	 * @param sdid 盛大数字ID
	 * @return 操作结果信息
	 */
	@Endpoint(alias="deletePeople")
	public UpdateResponse deletePeople(
			@Param(value = "sdid") Long sdid);
	
	/**
	 * @param sdid 盛大数字ID
	 * @param id 记录ID
	 * @return 操作结果信息
	 */
	@Endpoint(alias="deleteEducation")
	public UpdateResponse deleteEducation(
			@Param(value = "sdid") Long sdid,
			@Param(value = "id") Long id);
	
	/**
	 * @param sdid 盛大数字ID
	 * @param id 记录ID
	 * @return 操作结果信息
	 */
	@Endpoint(alias="deleteCompany")
	public UpdateResponse deleteCompany(
			@Param(value = "sdid") Long sdid,
			@Param(value = "id") Long id);
	/**
	 * 
	 * @param sdid
	 * @param PTid
	 * @return
	 */
	public int internalUpdatePTid(Long sdid, String PTid);
	

}

